package logica;

import java.util.Random;

public abstract class Dinosauro {

	private int IDDINO;
	private int D;
	private static final int Dmax =5;
	private int E;
	private int Emax;
	private int eta;
	private int vita;
	private int distanzaMassima;
	private Giocatore padrone;
	private Terra casellaAttuale;
	private Posizione posizioneAttuale;
	private Posizione origineMappaLocale;
	private int righeMappaLocale;
	private int colonneMappaLocale;
	private boolean staDeponendo= false;
	private boolean staCrescendo= false;
	private boolean staMuovendo= false;
	public static final int RAGGIUNTO_LIMITE_MOSSE = -1;
	public static final int NO_ALTRA_CRESCITA = -2;
	public static final int MORTE_PER_INEDIA = -3;
	public static final int DESTINAZIONE_NON_VALIDA = -4;
	private static Random generatoreCasualeVita = new Random();
	
	public int getDistanzaMassima() {
		return distanzaMassima;
	}
	public void setDistanzaMassima(int distanzaMassima) {
		this.distanzaMassima = distanzaMassima;
	}

	public Dinosauro(){
		D=1;
		Emax=1000*D;
		E=1000;
		eta=0;
		double numeroCasuale;
		numeroCasuale=generatoreCasualeVita.nextDouble();
		numeroCasuale=30+((numeroCasuale-0.5)*30*0.2*2)+0.5; // 30+-20%
		vita=(int)numeroCasuale;
	}
		
	public int crescita(){
		if(staDeponendo==true || staCrescendo==true || staMuovendo==true)
			return RAGGIUNTO_LIMITE_MOSSE;
		if(D>Dmax) 
			return NO_ALTRA_CRESCITA;
		if(E <= 1000*D/2)
			return MORTE_PER_INEDIA;
		
		E=E-1000*D/2;
		staCrescendo=true;
		D++;
		return E;
	}
	
	public int deposizioneUovo(){
		if(staDeponendo==true || staCrescendo==true || staMuovendo==true)
			return RAGGIUNTO_LIMITE_MOSSE;
		if(E <= 1500)
			return MORTE_PER_INEDIA;
		E=E-1500;
		staDeponendo=true;
		return E;
	}
	
	public int movimento(Posizione dest){
		if(staDeponendo==true || staCrescendo==true || staMuovendo==true)
			return RAGGIUNTO_LIMITE_MOSSE;
		int d=0;
		/*
		d=...
		if(d...)
			return DESTINAZIONE_NON_VALIDA;
		*/	
		if(E <= 10*(2^d))
			return MORTE_PER_INEDIA;
		E = E- 10*2^d;
		staMuovendo=true;
		return E;
	}
	
}
